package com.zhentao.controller;
import com.zhentao.pojo.Ship;
import org.springframework.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhentao.mapper.OrderMainMapper;
import com.zhentao.pojo.OrderMain;
import com.zhentao.service.OrderMainService;
import com.zhentao.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/order")
public class OrderController {
    // 订单管理功能设计说明
    @Autowired
    private OrderMainService orderMainService;

    @Autowired
    private OrderMainMapper orderMainMapper;

    // 搜索功能：支持根据订单号、船舶名称、IMO、MMSI
    @GetMapping("/search") // 映射HTTP GET /order/search
    public Result<List<OrderMain>> searchOrders(
            @RequestParam(required = false) String orderNo,  // 可选：订单号
            @RequestParam(required = false) String shipName, // 可选：船舶名称（模糊）
            @RequestParam(required = false) String imoCode,  // 可选：IMO编号（精确）
            @RequestParam(required = false) String mmsiCode  // 可选：MMSI编号（精确）
    ){
        QueryWrapper<OrderMain> queryWrapper = new QueryWrapper<>();

        if (orderNo != null){
            queryWrapper.eq("order_no", orderNo);
        }
        if (shipName != null){
            queryWrapper.like("ship_name", shipName);
        }
        if (imoCode != null){
            queryWrapper.eq("imo_code", imoCode);
        }
        if (mmsiCode != null){
            queryWrapper.eq("mmsi_code", mmsiCode);
        }
        List<OrderMain> orderList = orderMainMapper.searchOrdersWithShip(orderNo, shipName, imoCode, mmsiCode);
        //统一包装返回
        return Result.success(orderList);
    }
    // 筛选功能：
    //   - 根据订单状态筛选
    //   - 根据订单日期进行筛选
    @GetMapping("/filter")
    public Result<List<OrderMain>> filterOrders(@RequestParam(required = false) Integer orderStatus, @RequestParam(required = false) String completeTime){
        QueryWrapper<OrderMain> queryWrapper = new QueryWrapper<>();
        if (!StringUtils.isEmpty(orderStatus)){
            queryWrapper.eq("order_status", orderStatus);
        }
        if (!StringUtils.isEmpty(completeTime)){
            queryWrapper.eq("complete_time", completeTime);
        }
        List<OrderMain> orderList = orderMainService.list(queryWrapper);
        return Result.success(orderList);
    }
    // 订单列表展示字段：
    //   - 订单编号
    //   - 船舶IMO编号
    //   - 船舶MMSI
    //   - 支付方式
    //   - 下单时间
    //   - 订单状态
    //   - 商品合计
    //   - 优惠金额
    //   - 运费金额
    //   - 应付金额
    @GetMapping("/list")
    public Result<List<OrderMain>> listOrders(){
        List<OrderMain> orderList = orderMainMapper.listOrders();
        return Result.success(orderList);
    }
    //修改订单对应的状态
    @GetMapping("/updateStatus")
    public Result<String> updateOrderStatus(@RequestParam Integer orderId, @RequestParam Integer orderStatus){
        OrderMain orderMain = new OrderMain();
        orderMain.setOrderId(Long.valueOf(orderId));
        orderMain.setOrderStatus(orderStatus);
        boolean success = orderMainService.updateById(orderMain);
        return success ? Result.success("更新订单状态成功") : Result.fail("更新订单状态失败");
    }
    @GetMapping("/findOrderStatus")
    public Result<OrderMain> findOrderStatus(@RequestParam(required = false) Integer orderStatus) {
        QueryWrapper<OrderMain> queryWrapper = new QueryWrapper<>();
        if (!StringUtils.isEmpty(orderStatus)){
            queryWrapper.eq("order_status", orderStatus);
        }
        OrderMain orderMain = orderMainService.getOne(queryWrapper);
        return Result.success(orderMain);
    }
    // 订单详情页面字段：
    //   - 订单信息：
    //       - 订单编号
    //       - 船舶IMO编号
    //       - 船舶MMSI
    //       - 支付方式
    //       - 订单状态
    //   - 收货信息：
    //       - 船长姓名
    //       - 联系方式
    //       - 收货港口
    //   - 商品信息：
    //       - 商品封面
    //       - 商品名称
    //       - 商品规格
    //       - 商品价格
    //       - 商品合计
    //   - 费用信息：
    //       - 运费金额
    //       - 优惠金额
    //       - 应付金额
    //   - 时间信息：
    //       - 下单时间
    //       - 发货时间
    //       - 收货时间
    @GetMapping("/detail")
    public Result<OrderMain> getOrderDetail(@RequestParam Integer orderId){
        OrderMain orderMain = orderMainMapper.detailOrders(orderId);
        return Result.success(orderMain);
    }
}
